#include<iostream>
#include<pthread.h>
#include<unistd.h>

//该count叫做线程的局部存储
__thread int count = 1;
//线程局部存储只能储存内置类型和部分指针
//线程局部存储--全部变量，又不想让其他线程看到

//可以看到count的地址不一样，没有线程都有自己的局部存储空间
std::string Addr(int &c)
{
    char addr[64];
    snprintf(addr,sizeof(addr),"%p",&c);
    return addr;
}


void* routine1(void* args)
{
    (void)args;
    while(true)
    {
        std::cout<<"thread-1,count = "<<count<<",[我来修改count],"<<"&count:"<<Addr(count)<<std::endl;
        count++;
        sleep(1);
    }
}

void* routine2(void* args)
{
    (void)args;
    while(true)
    {
        std::cout<<"thread-2,count = "<<count<<" ,&count:"<<Addr(count)<<std::endl;
        count++;
        sleep(1);
    }
}

int main()
{
    pthread_t tid1,tid2;
    pthread_create(&tid1,nullptr,routine1,nullptr);
    pthread_create(&tid2,nullptr,routine2,nullptr);

    pthread_join(tid1,nullptr);
    pthread_join(tid2,nullptr);

    return 0;
}